parser grammar AnalizadorGDLParser;

options {
  language = Java;
  tokenVocab = AnalizadorGDLLexer;
}

@header {package PL.practica6;}

@members{

ArrayList <RecognitionException> errores = new ArrayList<RecognitionException>();

public boolean listaVacia (){
    if (errores.isEmpty()){
      return true;
    }else
      return false;
}

public ArrayList getListaErrores(){return errores;}


@Override
public void reportError (RecognitionException e){
  System.out.println (getErrorMessage(e, getTokenNames()));
  errores.add(e);
}

}


entrada: graph*;

graph : GRAPH DOSPUNTOS ABRIRLLAVE (node|edge)* CERRARLLAVE ;

node :  NODE DOSPUNTOS ABRIRLLAVE optionnode optionnode optionnode? CERRARLLAVE ;
  optionnode : title | label | borderstyle;
    title : TITLE DOSPUNTOS CADENA;
    label :  LABEL DOSPUNTOS CADENA;
    borderstyle : BORDERSTYLE DOSPUNTOS NODESTYLE;
edge : EDGE DOSPUNTOS ABRIRLLAVE optionedge optionedge optionedge? CERRARLLAVE;
  optionedge : source | target | arrowstyle;
  source : SOURCE DOSPUNTOS CADENA;
  target : TARGET DOSPUNTOS CADENA;
  arrowstyle: ARROWSTYLE DOSPUNTOS EDGESTYLE;
